﻿#pragma once

#include "../../task/YTools.h"
#include "../../task/YDemuxerTask.h"
#include "../../task/YDecoderTask.h"
#include "../../../sdl/render/IVideoRenderView.h"


/// <summary>
/// 音视频播放器控制类：
/// 功能：
///		1.音视频同步播放
///		2.快慢速播放
///		3.音视频同步在这里面做是合理的控制的代码复杂度最小
/// </summary>
class PlayerController : public YThread
{

public:
	PlayerController();
	~PlayerController();
	
	//责任链模式，接收音视频数据
	void Do(AVPacket* pkt) override;

	//打开音视频 初始化播放和渲染
	bool Open(const char* url, void* winid);

	//停止/销毁
	void Stop();

	//主线程处理同步
	void Working() override;

	//开启 解封装 音视频解码 和 处理同步的线程
	void Start();

	//渲染视频 播放音频
	void Update();

	/// <summary>
	/// 设置播放速度，此处变速变调（如果想要变速不变调需要引入额外的库，这个后续再做处理）
	/// </summary>
	/// <param name="s"></param>
	void SetSpeed(float s);

	//总时长 毫秒
	long long total_ms() { return total_ms_; }

	//当前播放的位置 毫秒
	long long pos_ms() { return pos_ms_; }

	//设置视频播放位置，毫秒
	bool Seek(long long ms);

	/// <summary>
	/// 暂停或者播放视频
	/// </summary>
	/// <param name="is_pause">true代表暂停，false代表播放</param>
	void Pause(bool is_pause) override;

protected:
	YDemuxerTask demux_;              //解封装
	YDecoderTask audio_decode_;      //音频解码
	YDecoderTask video_decode_;      //视频解码
	IVideoRenderView* view_ = nullptr;    //视频渲染

	long long total_ms_ = 0;//视频总时长（单位是毫秒）
	long long pos_ms_ = 0;//视频当前播放位置
};
